package model

import (
	"crypto/md5"
	"encoding/base64"
	"fmt"
)

const TableNameDavUser = "dav_user"

// DavUser 用户管理
type DavUser struct {
	ID          int64       `gorm:"column:id;type:bigint;primaryKey;autoIncrement:true;comment:id" json:"id"`                              // id
	RoleID      int32       `gorm:"column:role_id;type:int;not null;comment:归属角色" json:"role_id"`                                          // 归属角色
	Username    string      `gorm:"column:username;type:varchar(50);not null;uniqueIndex:username,priority:1;comment:用户名" json:"username"` // 用户名
	Password    string      `gorm:"column:password;type:varchar(32);not null;comment:密码" json:"password"`                                  // 密码
	Name        string      `gorm:"column:name;type:varchar(50);not null;comment:名称" json:"name"`                                          // 名称
	Salt        string      `gorm:"column:salt;type:varchar(8);not null;comment:salt" json:"salt"`                                         // salt
	Createtime  int32       `gorm:"column:createtime;type:int;not null;comment:创建时间;autoUpdateTime:second" json:"createtime"`              // 创建时间
	Updatetime  int32       `gorm:"column:updatetime;type:int;not null;comment:更新时间;autoUpdateTime:second" json:"updatetime"`              // 更新时间
	DavUserRole DavUserRole `gorm:"foreignKey:RoleID;references:ID" json:"role"`
}

type CreateDavUser struct {
	RoleID   int32  `json:"role_id"  binding:"required" default:"1"`       // 归属角色
	Username string `json:"username"  binding:"required" default:"admin"`  // 用户名
	Password string `json:"password"  binding:"required" default:"123456"` // 密码
	Name     string `json:"name"  binding:"required" default:"张三"`         // 名称
}
type UpdateDavUser struct {
	ID       int64  `json:"id" binding:"required"` // id
	RoleID   int32  `json:"role_id"  `             // 归属角色
	Username string `json:"username"`              // 用户名
	Password string `json:"password"`              // 密码
	Name     string `json:"name"`                  // 名称
}

// TableName DavUser's table name
func (*DavUser) TableName() string {
	return TableNameDavUser
}

// 加密密码
func (*DavUser) EncrypPass(pass string, salf string) string {

	salf = base64.StdEncoding.EncodeToString([]byte(pass + salf))

	return fmt.Sprintf("%x", md5.Sum([]byte(pass+salf)))

}

// 检测密码是否正确
func (d *DavUser) CheckPass(checkPass, pass, salf string) bool {

	checkPass = d.EncrypPass(checkPass, salf)

	return checkPass == pass
}
